<?php
class BaseWidget {
	var $config = null;
	public function init($widget_config){
		$this->config = $widget_config;
	}
	
	/**
	 * 获取数值
	 * @param string $name 参数名
	 * @param number $default_value 默认值
	 */
	protected function get_int_value($name, $default_value=0){
		if(!isset($this->config[$name])){
			return $default_value;
		}
		return intval($this->config[$name]);
	}
	
	/**
	 * 获取字符型参数
	 * @param string $name
	 * @param string $default_value
	 */
	protected function get_value($name, $default_value=''){
		if(!isset($this->config[$name])){
			return $default_value;
		}
		return $this->config[$name];
	}
	
	/**
	 * 父类应该重写此方法
	 */
	public function get_data(){
		return null;
	}
	
	/**
	 * 获取内容组件分类
	 */
	public static function get_content_widget_cates(){
		$relation_mod = new RelationModel();
		$content_widget_cates = $relation_mod->get_relation_by_code('widget_cate', Lang::get_langs());
		$options = array();
		foreach($content_widget_cates as $k=>$v){
			$options[$k] = $v[LANGUAGE]['name'];
		}
		return $options;
	}
	
	/**
	 * 获取布局组件分类
	 */
	public static function get_layout_widget_cates(){
		return array(
			'root' => array('name' => '文档组件'),
			'layout' => array('name' => '布局组件'),
		);
	}
	
	/**
	 * 获取默认值（一般用于刚拖拉进去时，显示默认的数据）
	 */
	public function default_val(){return null;}
	
	/**
	 * 获取某个组件分类下的所有组件
	 * @param unknown_type $cate_key
	 */
	public static function get_widgets_by_cate($cate_key){
		if(!defined('WIDGET_DIR')){
			define('WIDGET_DIR', ROOT_PATH . '/protected/includes/widgets/');
		}
		if(!is_dir(WIDGET_DIR . $cate_key)){
			return null;
		}
		$widgets = array();
		$except_dirs = array('.', '..', '.svn', 'layout', 'root');
		$themlate_thumb_path = ROOT_PATH . '/template/widgets/';
		
		$handle = opendir(WIDGET_DIR . $cate_key);
		while (false !== ($widget_dir = readdir($handle))) {
			if(!in_array($widget_dir, $except_dirs)) {
				$cur_path = WIDGET_DIR . $cate_key . '/' . $widget_dir;
				if(is_dir($cur_path)){
					$widget_class_name = ucfirst($widget_dir) . 'Widget';
					if(is_file($cur_path . '/' . $widget_class_name . '.php')){
						require_once $cur_path . '/' . $widget_class_name . '.php';
						$widget = new $widget_class_name;
						$widgets[$widget_dir] = $widget->get_info();
						
						if(!is_dir($cur_path . '/template/')){
							continue;
						}
						//读取模板
						$template_handle = opendir($cur_path . '/template/');
						while (false !== ($template = readdir($template_handle))) {
							if(in_array($template, $except_dirs))continue;
							$template_name = preg_replace('/^(.*)\.' . TEMPLATE_TYPE . '$/im', '$1', $template);
							$template_file = $cur_path . '/template/' . $template;
							if(is_file($template_file)){
								//获取缩略图
								$template_thumb = $themlate_thumb_path . $cate_key . '/' . $widget_dir . '/' . $template_name . '.png';
								if(is_file($template_thumb)){
									$widgets[$widget_dir]['templates'][$template] = 'widgets/' . $cate_key . '/' . $widget_dir . '/' . $template_name . '.png';
								}else{
									$widgets[$widget_dir]['templates'][$template] = 'manager/images/no_picture.png';
								}
							}
						}
						closedir($template_handle);
					}
				}
			}
		}
		closedir($handle);
		return $widgets;
	}
}

?>